package com.time.auth.common.entity;

import lombok.Data;
import org.springframework.util.CollectionUtils;

import java.io.Serial;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;

/**
 * 分页返回的实体
 *
 * @author: HuangQi
 * @date: Created in 11:50 2025/9/24
 * @description: 分页返回的实体
 */
@Data
public class PageResult<T> implements Serializable {

    @Serial
    private  static final long serialVersionUID = 3757305175809456834L;

    /**
     * 当前页数
     */
    private Integer pageNo = 1;

    /**
     * 每页总条数
     */
    private Integer pageSize = 20;

    /**
     * 总条数
     */
    private Integer total = 0;

    /**
     * 总页数
     */
    private Integer totalPage = 0;

    /**
     * 数据列表
     */
    private List<T> result = Collections.emptyList();

    /**
     * 开始条数
     */
    private Integer start = 1;

    /**
     * 结束条数
     */
    private Integer end = 0;


    /**
     * 设置数据列表
     *
     * @param result 传入数据列表
     */
    public void setRecodes(List<T> result) {
        this.result = result;
        if (CollectionUtils.isEmpty(result)) {
            setTotal(result.size());
        }
    }


    /**
     * 设置中条数
     *
     * @param total 总条数
     */
    public void setTotal(Integer total) {
        this.total = total;
        if (this.pageSize > 0) {
            this.totalPage = (total / this.pageSize) + (total % pageSize == 0 ? 0 : 1);
        } else {
            this.totalPage = 0;
        }
        this.start = (this.pageNo > 0 ? (this.pageNo - 1) * this.pageSize : 0) + 1;
        this.end = (this.start - 1 + this.pageSize * (this.pageNo > 0 ? 1 : 0));
    }


    /**
     * 设置每页条数
     *
     * @param pageSize 每页条数
     */
    public void setPageSize(Integer pageSize) {
        if (pageSize < 0) {
            pageSize = 20;
        }
        this.pageSize = pageSize;
    }


    /**
     * 设置当前页数
     *
     * @param pageNo 当前页数
     */
    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }

}
